package cn.iocoder.yudao.module.mzt.service.systemconfig;

import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;

import cn.iocoder.yudao.module.mzt.controller.admin.systemconfig.vo.*;
import cn.iocoder.yudao.module.mzt.dal.dataobject.systemconfig.SystemConfigDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;

import cn.iocoder.yudao.module.mzt.dal.mysql.systemconfig.SystemConfigMapper;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mzt.enums.ErrorCodeConstants.*;

/**
 * 系统配置 Service 实现类
 *
 * @author Geordie
 */
@Service
@Validated
public class SystemConfigServiceImpl implements SystemConfigService {

    @Resource
    private SystemConfigMapper systemConfigMapper;

    @Override
    public Long createSystemConfig(SystemConfigSaveReqVO createReqVO) {
        // 插入
        SystemConfigDO systemConfig = BeanUtils.toBean(createReqVO, SystemConfigDO.class);
        try {
            systemConfigMapper.insert(systemConfig);
        } catch (DuplicateKeyException e) {
            throw exception(SYSTEM_CONFIG_KEY_DUPLICATE);
        }
        // 返回
        return systemConfig.getId();
    }

    @Override
    public void updateSystemConfig(SystemConfigSaveReqVO updateReqVO) {
        // 校验存在
        validateSystemConfigExists(updateReqVO.getId());
        // 更新
        SystemConfigDO updateObj = BeanUtils.toBean(updateReqVO, SystemConfigDO.class);
        systemConfigMapper.updateById(updateObj);
    }

    @Override
    public void deleteSystemConfig(Long id) {
        // 校验存在
        validateSystemConfigExists(id);
        // 删除
        systemConfigMapper.deleteById(id);
    }

    private void validateSystemConfigExists(Long id) {
        if (systemConfigMapper.selectById(id) == null) {
            throw exception(SYSTEM_CONFIG_NOT_EXISTS);
        }
    }

    @Override
    public SystemConfigDO getSystemConfig(Long id) {
        return systemConfigMapper.selectById(id);
    }

    @Override
    public PageResult<SystemConfigDO> getSystemConfigPage(SystemConfigPageReqVO pageReqVO) {
        return systemConfigMapper.selectPage(pageReqVO);
    }

}
